/**
 * 权限指令 v-permission
 * 使用方式：
 *   v-permission="'add'"                  // 需要add权限
 *   v-permission="['add', 'edit']"        // 需要add或edit权限
 *   v-permission:disabled="'delete'"      // 没有权限时禁用而非隐藏
 */
export default {
    inserted(el, binding, vnode) {
        const { value, arg } = binding
        const permissions = JSON.parse(localStorage.getItem('permissions')) // 从Vuex获取当前用户权限

        if (value) {
            const routeKey = window.location.hash.replace('#', '');
            let requiredPerms;
            if (Array.isArray(value)) {
                requiredPerms = value.map(i => routeKey + ":" + i)
            } else {
                requiredPerms = [routeKey + ":" + value]
            }
            const hasPermission = permissions.some(perm => requiredPerms.includes(perm))

            if (!hasPermission) {
                if (arg === 'disabled') {
                    // 禁用元素
                    el.disabled = true
                    el.classList.add('is-disabled')
                    el.setAttribute('title', '无权限操作')
                } else {
                    // 默认行为：移除元素
                    el.parentNode && el.parentNode.removeChild(el)
                }
            }
        } else {
            throw new Error(`需要指定权限，如 v-permission="'add'"`)
        }
    }
}